#include "elementotexto.h"

ElementoTexto::ElementoTexto()
{
    dividido = false;
}

ElementoTexto::ElementoTexto(const QString& texto)
{
    this->textoFijo = texto;
    dividido = false;
}

void ElementoTexto::imprimir(EstadoImpresion& estado, const QRect rect)
{
    QString texto = getTexto(estado);
    int descenso = obtenerDescenso(estado);

    estado.getPainter()->setClipRect(rect);
    estado.getPainter()->drawText(rect.x(), rect.bottom() - descenso, texto);
    estado.getPainter()->setClipping(false);

    //estado.getPainter()->setPen(Qt::red);
    //estado.getPainter()->drawRect(rect);
}

QSize ElementoTexto::obtenerDimensiones(EstadoImpresion& estado)
{
    QString texto = getTexto(estado);

    QFontMetrics metrics(estado.getPainter()->fontMetrics());
    QSize size(metrics.width(texto), metrics.boundingRect(texto).height());
    return size;
}

/*!
 * Divide el elemento en dos partes: el elemento se trunca al ancho disponible y devuelve el resto.
 */
ElementoImpresion* ElementoTexto::dividir(int anchoDisponible, EstadoImpresion& estado, ElementoImpresion*& elementoRestante)
{    
    QString texto = getTexto(estado);

    QFontMetrics metrics(estado.getPainter()->fontMetrics());
    int numeroMaximoCaracteres = texto.size();

    for (int i = 1; i <= texto.size(); i++) {
        QString subcadena = texto.left(i);
        if (metrics.boundingRect(subcadena).width() >= anchoDisponible) {
            numeroMaximoCaracteres = i - 1; 
            break;
        }
    }

    int indiceCararterCorte = numeroMaximoCaracteres;
    for (int i = numeroMaximoCaracteres; i > 0; i--) {
        if (texto.at(i) == ' ') {
            indiceCararterCorte = i;
            break;
        }
    }

    ElementoTexto* elementoTextoRestante = new ElementoTexto(texto.right(texto.size() - indiceCararterCorte - 1));
    elementoTextoRestante->dividido = true;
    elementoRestante = elementoTextoRestante;

    return new ElementoTexto(texto.left(indiceCararterCorte));
}


int ElementoTexto::obtenerDescenso(EstadoImpresion& estado)
{
    QFontMetrics metrics(estado.getPainter()->fontMetrics());

    return metrics.descent();
}

